package code11_util;

import org.junit.Test;

public class TestBaseType {
	@Test
	public void f1(){
		// 可以把String转换为Integer
		Integer n1 = new Integer("10");
		
		// 装箱: 把int转换为Integer
		Integer n2 = new Integer(10);
		System.out.println(n2);
		
		// 拆箱: 把Integer转换为int
		int m = n2.intValue();
		System.out.println(m);
	}
	@Test
	public void f2() {
		// JDK5以及之后, 支持自动装箱和拆箱
		Integer n1 = 10;// 自动装箱
		
		int m1 = n1;// 自动拆箱
		
		// 在进行运算时，也会自动拆箱
		int m2 = n1 + 100;
		
		int x = 3;
		Integer y = new Integer(3);
		Integer z = new Integer(3);
		System.out.println(x == y);// true, 拆箱再比较
		System.out.println(y == z);// false, 类型都是Integer不会拆箱, 地址不同
		
		System.out.println("----------");
		// 此种定义方式，当值在Integer缓存值(-128~127)范围内时，不会重复创建对象。
		Integer y1 = 100;
		Integer z1 = 100;
		System.out.println(y1 == z1);// true
		
		Integer y2 = 200;
		Integer z2 = 200;
		System.out.println(y2 == z2);// false
		
		// 包装类中的值一旦定义不可修改, 但可以改变量
	}
	@Test
	public void f3() {
		// 先进行了装箱, 再进行多态
		Object o1 = 5;
		
		Integer n1 = 50;
		int n2 = 5;
		// 如果没有对应类型的，则会进行拆箱或装箱，再找对应的方法
		fun(n1);// fun(Integer x)
		fun(n2);// fun(int x)
	}
	// 方法的重载
	public void fun(int x) {
		System.out.println("TestBaseType.fun(int x)"+x);
	}
	public void fun(Integer x) {
		System.out.println("TestBaseType.fun(Integer x)"+x);
	}
	@Test
	public void f4() {
		// 与字符串的转换
		
		// 将基本数据类型转为 String
		// 方式1: 静态方法 Integer.toString(), Double.toString() 等
		int a = 9;
		String s1 = Integer.toString(9);
		// 方式2:
		String s2 = a + "";
		
		// 以2进制形式表示
		System.out.println(Integer.toBinaryString(a));
		// 以8进制形式表示
		System.out.println(Integer.toOctalString(a));
		// 以16进制形式表示
		System.out.println(Integer.toHexString(a));
		
		// 静态方法: Integer.valueOf(), Double.valueOf() 等
		Integer n1 = Integer.valueOf(a);// 基本数据类型转Integer
		Integer n2 = Integer.valueOf("9");// String转Integer
		Integer n3 = Integer.valueOf("111", 2);// 把指定进制表示的字符串数字转换为 Integer
		System.out.println("n3:"+n3);
		
		// 将 String 转为 基本数据类型
		// 静态方法: Integer.parseInt(), Double.parseDouble() 等
		int i1 = Integer.parseInt("123");// 以10进制进行转换
		int i2 = Integer.parseInt("ff", 16);// 以指定进制进行转换
		System.out.println("i2:" + i2);// 255
		
		System.out.println("Integer.MAX_VALUE:"+Integer.MAX_VALUE);
		System.out.println("Integer.MIN_VALUE:"+Integer.MIN_VALUE);
	}
	
}
